ALTER TABLE public.artm
    ADD COLUMN codArtlote varchar COLLATE pg_catalog."default";

ALTER TABLE public.artm
    ADD COLUMN presentacionlote numeric;

COMMENT ON COLUMN public.artm.codArtlote
    IS 'Codigo real de articulo del lote (trazabilidad)';
    
-- Vista de lotes

CREATE OR REPLACE VIEW public.vstklote
 AS
 SELECT artm.idart,
    artm.nrolote,
    artm.fechalote,
    sum(artm.signo::numeric * artm.cant) AS cant,
    artm.codstkdep,
    artm.codArtLote,
    artm.presentacionLote
   FROM artm
  WHERE artm.nrolote IS NOT NULL AND artm.modificastock::text = 'S'::text
  GROUP BY artm.idart, artm.codstkdep, artm.nrolote, artm.fechalote, artm.codArtLote, artm.presentacionLote
 HAVING sum(artm.signo::numeric * artm.cant) <> 0.00;

ALTER TABLE public.vstklote
    OWNER TO abacouser;

GRANT ALL ON TABLE public.vstklote TO abacouser;


/* Funcion de cliente que tiene los token por empresa */

CREATE OR REPLACE FUNCTION cliente.TokenARemito(pCodEmp varchar)
    RETURNS character varying 
    LANGUAGE 'plpgsql'
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
  respuesta varchar;
BEGIN
  IF pCodEmp = 'a1' THEN
     respuesta := 'xxxx';
  END IF;
  RETURN respuesta;
END;
$BODY$;

ALTER FUNCTION cliente.TokenARemito(varchar)
    OWNER TO abacouser;
        
CREATE SCHEMA IF NOT EXISTS ARemito;

GRANT ALL ON SCHEMA aRemito TO abacouser;

        
    
CREATE OR REPLACE FUNCTION aremito.jsonaenviar(
	pidcomm integer,
	pcodemp character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
  vCuit 	varchar;
  vToken 	varchar;
  vFecha 	Timestamp;
  vNroPtoVta		integer;
  vNro 				integer;
  vCadenaProductos 	varchar;
  
  cCursorArtm   refcursor;
  
  vCodArt			varchar;
  vPresentacion		numeric;
  vCant				numeric;
  vSigno			integer;
  
  vRespuesta varchar;
  
BEGIN
  -- Json a enviar al ministerio.

 
 SELECT PAD.CUIT, COMM.FECHA, COMM.NROPTOVTA, COMM.NRO INTO
        vCuit, vFecha, vNroPtoVta, vNro
 FROM PAD
 INNER JOIN COMM ON COMM.IDPAD = PAD.ID
 WHERE COMM.ID = pIdComm;
 
 vToken := cliente.TokenARemito(pCodEmp);
 
 
 OPEN cCursorArtm FOR SELECT coalesce(codArtLote, 'SinCodigo'), coalesce(presentacionLote,1), coalesce(cant,1), vSigno
 					  FROM ARTM 
					  WHERE ARTM.IdComm = pIdComm; --AND NroLote is not null;
 
 FETCH cCursorArtm INTO vCodArt, vPresentacion, vCant, vSigno;
 
 vCadenaProductos := '';
 
 LOOP
    IF NOT FOUND THEN EXIT; END IF;
	vCadenaProductos := vCadenaProductos || 
	                    '{"nro_registro":"' || vCodArt || '",' ||
						'"cantidad":' 	|| cast(vCant / vPresentacion as varchar) || ',' ||
						'"contenido":' || cast(vPresentacion as varchar) || '},';
	FETCH cCursorArtm INTO vCodArt, vPresentacion, vCant, vSigno;
 END LOOP;
 
 IF vCadenaProductos <> '' THEN
    vCadenaProductos := substring(vCadenaProductos, 1, length(vCadenaProductos) - 1); -- Le saco la coma.
	vRespuesta := 
	'{"token":"' || vToken || '",' ||
      '"devolucion": ' || CASE WHEN vSigno = -1 THEN '0' ELSE '1' END || ',' || -- me quedo con el último signo
	  '"nro_aremito":"'  || trim(to_char(coalesce(vNroPtoVta,0), '00000')) || trim(to_char(coalesce(vNro,0), '0000000000')) || '",' ||
	  '"cuit_destino":"'  || replace(coalesce(vCuit,''), '-','') || '",' ||
	  '"fecha_emision":"' || to_char(coalesce(vFecha,'20000101'), 'YYYY-MM-DD') || '",' ||
	  '"productos":[' || vCadenaProductos || ']}';
 ELSE
	vRespuesta := '';
 END IF;
 
 RETURN vRespuesta;
END;
$BODY$;

ALTER FUNCTION aremito.jsonaenviar(integer, character varying)
    OWNER TO abacouser;

-- Analiza el error y devuelve el mensaje (por ahora es el mismo que recibe)    
    
CREATE OR REPLACE FUNCTION aremito.analisiserror(
	pidcomm integer,
	pmensaje character varying)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
  vMensajeJson  json;
  vRespuesta    varchar;
BEGIN
  insert into importacion.impxml (nroxml, texto) values (1, vMensajeJson);
  vMensajeJson := cast(pMensaje as json);
  
  IF (vMensajeJson ->> 'success') = 'false' THEN 
     vRespuesta := vMensajeJson ->> 'message';
  END IF;
  
  RETURN vRespuesta;
END;
$BODY$;

ALTER FUNCTION aremito.analisiserror(integer, character varying)
    OWNER TO abacouser;


--
SELECT aaVersion('500.00','499.00');
--
